home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 32 / Amiga Format AFCD32 (Nov 1998, Issue 117).iso / -seriously_amiga- / programming / other / hrtmon / src / cmd_p.s < prev    next >
Text File  |  1998-08-10  |  17KB  |  937 lines

  1.  
  2. ;HRTmon Amiga system monitor
  3. ;Copyright (C) 1991-1998 Alain Malek Alain.Malek@cryogen.com
  4. ;
  5. ;This program is free software; you can redistribute it and/or
  6. ;modify it under the terms of the GNU General Public License
  7. ;as published by the Free Software Foundation; either version 2
  8. ;of the License, or (at your option) any later version.
  9. ;
  10. ;This program is distributed in the hope that it will be useful,
  11. ;but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. ;GNU General Public License for more details.
  14. ;
  15. ;You can find the full GNU GPL online at: http://www.gnu.org
  16.  
  17.  
  18. ;-------------- gfx ripper --------------------------------
  19.  
  20. cmd_p        bsr    evaluate        ;read picno
  21.         bmi.w    illegal_val        ;illegal expression ?
  22.         beq.b    .okpara            ;got one param ?
  23.         moveq    #0,d0            ;default picno
  24. .okpara        tst.l    d0
  25.         bmi.w    illegal_val
  26.         cmp.w    #500,d0
  27.         bge.w    illegal_val
  28.  
  29.         jsr    remove_pic
  30.  
  31.         jsr    analyse_copper
  32.  
  33.         lea.l    custom,a3
  34.  
  35.         move.w    $100(a3),d0        ;calc depth
  36.         btst    #15,d0
  37.         sne    hires
  38.         btst    #11,d0
  39.         sne    ham
  40.         moveq    #8,d1            ;from BPLCON0
  41.         btst    #4,d0            ;8 plan ?
  42.         bne.b    .go8plan
  43.         rol.w    #4,d0
  44.         and.w    #%111,d0
  45.         move.w    d0,d1
  46.         bne.b    .go8plan        ;at least 1 plan ?
  47.         moveq    #1,d1
  48. .go8plan    move.w    d1,depth
  49.  
  50.         cmp.w    #6,d1
  51.         seq    ehb
  52.         move.w    $104(a3),d0
  53.         btst    #9,d0            ; kill ehb ?
  54.         beq.b    .nokehb
  55.         sf    ehb
  56. .nokehb
  57.         movem.w    $92(a3),d0-d1        ;DDFSTRT,DDFSTOP
  58.         move.w    $1fc(a3),d2        ;FMODE
  59.         and.w    #%11,d2
  60.         cmp.w    #3,d2
  61.         bne.b    .nolimit
  62.         move.w    #$c0,d3
  63.         cmp.w    d3,d1
  64.         ble.b    .nolimit
  65.         move.w    d3,d1
  66. .nolimit    sub.w    d0,d1            ;calc width of pic
  67.         lsr.w    #3,d1            ;from these
  68.         addq.w    #1,d1            ;3 registers
  69.         cmp.w    #3,d2
  70.         bne.b    .nof3
  71.         addq.w    #2,d1
  72.         bra.b    .okfmode
  73. .nof3        tst.w    d2
  74.         beq.b    .okfmode
  75.         addq.w    #1,d1
  76. .okfmode    lsl.w    #4,d1
  77.         tst.b    hires
  78.         beq.b    .nohi
  79.         lsl.w    #1,d1
  80. .nohi        move.w    d1,width
  81.         move.w    #256,height        ;height is fixed to 256
  82.  
  83.         movem.l    $e0(a3),d0-d7
  84.         movem.l    d0-d7,bitplan        ;set default bitplan address
  85.  
  86.         move.w    $108(a3),d1        ;calc. modulo
  87.         move.w    $1fc(a3),d0        ;from FMODE
  88. ;        tst.b    hires
  89. ;        bne.b    .okfmodeb
  90.         and.w    #%11,d0
  91.         cmp.w    #3,d0
  92.         bne.b    .nof3b
  93.         addq.w    #8,d1
  94.         bra.b    .okfmodeb
  95. .nof3b        tst.w    d0
  96.         beq.b    .okfmodeb
  97.         addq.w    #4,d1
  98. .okfmodeb    move.w    width,d0        ;and from width
  99.         sub.w    #320,d0
  100.         asr.w    #3,d0
  101.         add.w    d0,d1
  102.         move.w    d1,modulo
  103.  
  104.         tst.w    height
  105.         bgt.b    .okh2
  106.         move.w    #256,height
  107. .okh2        tst.w    width
  108.         bgt.b    .okw2
  109.         move.w    #320,width
  110. .okw2
  111.         bsr    restore_palette
  112.  
  113.         move.w    #$7f7f,dkey
  114.  
  115. ;-------------- main loop -----------------------
  116.  
  117. .raster        move.l    $4(a6),d0        ;wait next VBL
  118.         lsr.l    #1,d0
  119.         lsr.w    #7,d0
  120.         cmp.w    #2,d0
  121.         bne.b    .raster
  122.  
  123.         movem.l    bitplan,d0-d7
  124.         movem.l    d0-d7,$e0(a6)
  125.         move.w    modulo,d0
  126.         move.w    d0,$108(a6)
  127.         move.w    d0,$10a(a6)
  128.  
  129.         move.w    #$38,$92(a6)
  130.         move.w    #$d0,$94(a6)
  131.         move.w    #0,$102(a6)
  132.         move.w    #%1100,$1fc(a6)
  133.         cmp.b    #1,config_screen
  134.         bne.b    .nontsc0
  135.         move.w    #$0,$1dc(a6)
  136.         bra.b    .okmode0
  137. .nontsc0    cmp.b    #2,config_screen
  138.         bne.b    .nomulti0
  139.         move.w    #$0,$1dc(a6)
  140.         bra.b    .okmode0
  141. .nomulti0    move.w    #$20,$1dc(a6)
  142. .okmode0
  143.         move.w    #$2c81,$8e(a6)
  144.         moveq    #0,d0            ;for $1e4
  145.         move.w    #$2c,d1
  146.         add.w    height,d1
  147.         cmp.b    #1,config_screen
  148.         bne.b    .nontsc
  149.         move.w    #200+$2c,d2
  150.         bra.b    .okmode
  151. .nontsc        move.w    #256+$2c,d2
  152. .okmode        cmp.w    d2,d1            ;max displayed height ?
  153.         ble.b    .okmaxv
  154.         move.w    d2,d1
  155. .okmaxv        cmp.w    #$100,d1
  156.         blt.b    .noVE8
  157.         or.w    #$0100,d0
  158. .noVE8        move.w    #$81,d2
  159.         add.w    width,d2
  160.         cmp.w    #320+$81,d2        ;max displayed width ?
  161.         blt.b    .okmaxh
  162.         move.w    #320+$81,d2
  163. .okmaxh        cmp.w    #$100,d2
  164.         blt.b    .noHE8
  165.         or.w    #$2000,d0
  166. .noHE8        lsl.w    #8,d1
  167.         and.w    #$ff,d2
  168.         or.w    d2,d1
  169.         move.w    d1,$90(a6)
  170.         move.w    d0,$1e4(a6)
  171.  
  172.         move.w    #$2,$106(a6)        ;sprites outside
  173.         move.w    spr_color,d0        ;sprite color bank 0-f
  174.         move.w    d0,d1
  175.         lsl.w    #4,d1
  176.         or.w    d1,d0
  177.         move.w    custom+$10c,d1
  178.         and.w    #$ff00,d1
  179.         or.w    d1,d0
  180.         move.w    d0,$10c(a6)
  181.  
  182.         move.w    depth,d0
  183.         cmp.w    #8,d0
  184.         bne.b    .no8
  185.         move.w    #$0010,d0
  186.         bra.b    .go100
  187. .no8        lsl.w    #8,d0
  188.         lsl.w    #4,d0
  189. .go100        or.w    #$0001,d0
  190.         tst.b    ham
  191.         beq.b    .noham
  192.         or.w    #$800,d0
  193. .noham        move.w    d0,$100(a6)
  194.  
  195.         bsr    do_param
  196.  
  197.         bsr    get_dkey
  198.  
  199.         lea.l    dkey,a0
  200.         move.b    (a0),d0
  201.         cmp.b    1(a0),d0        ;cmp with old dkey
  202.         beq.b    .nonew            ;for repeat mode
  203.         move.w    #20,dkey_rep
  204.         move.b    (a0),1(a0)
  205.         bra.b    .newkey
  206. .nonew        subq.w    #1,dkey_rep
  207.         bpl.w    .raster
  208.         clr.w    dkey_rep
  209.  
  210. .newkey
  211. ;-------------- L+R Shift ------------------
  212.         cmp.b    #$60,d0
  213.         beq.b    .shift
  214.         cmp.b    #$61,d0
  215.         bne.b    .noshift
  216. .shift        st    dkey_shift
  217. .noshift    cmp.b    #$60+$80,d0
  218.         beq.b    .shift2
  219.         cmp.b    #$61+$80,d0
  220.         bne.b    .noshift2
  221. .shift2        sf    dkey_shift
  222. .noshift2
  223. ;-------------- f10/esc exit gfx-ripper ----
  224.         cmp.b    #$45+$80,d0
  225.         beq.b    .exit
  226.         cmp.b    #$59,d0
  227.         bne.b    .no_f10
  228. .exit        move.b    #$7f,(a0)
  229.         bra.w    .end_show
  230. .no_f10
  231. ;-------------- + add 1 bitplan ------------
  232.         cmp.b    #$0c,d0
  233.         bne.b    .noplus
  234.         cmp.w    #8,depth
  235.         beq.b    .noplus
  236.         addq.w    #1,depth
  237. .noplus
  238. ;-------------- - sub 1 bitplan ------------
  239.         cmp.b    #$0b,d0
  240.         bne.b    .nominus
  241.         cmp.w    #1,depth
  242.         beq.b    .nominus
  243.         subq.w    #1,depth
  244. .nominus
  245. ;-------------- down move pic down ---------
  246.         cmp.b    #$4d,d0
  247.         bne.b    .nodown
  248.         tst.b    set_height
  249.         beq.b    .noset
  250.         addq.w    #1,tmp_height
  251.         sf    dkey_shift
  252. .noset        moveq    #40,d1
  253.         add.w    modulo,d1
  254.         ext.l    d1
  255.         tst.b    dkey_shift
  256.         beq.b    .nos1
  257.         muls    height,d1
  258. .nos1        move.b    bitplan_lock,d2
  259.         lea.l    bitplan,a1
  260.         moveq    #8-1,d3
  261. .plan        lsr.b    #1,d2
  262.         bcs.b    .lock
  263.         add.l    d1,(a1)
  264.         move.l    max_chip,d5
  265.         subq.l    #2,d5
  266.         and.l    d5,(a1)
  267. .lock        addq.l    #4,a1
  268.         dbf    d3,.plan
  269. .nodown
  270. ;-------------- up move pic up -------------
  271.         cmp.b    #$4c,d0
  272.         bne.b    .noup
  273.         tst.b    set_height
  274.         beq.b    .noset2
  275.         tst.w    tmp_height
  276.         beq.b    .noup
  277.         subq.w    #1,tmp_height
  278.         sf    dkey_shift
  279. .noset2        moveq    #40,d1
  280.         add.w    modulo,d1
  281.         ext.l    d1
  282.         tst.b    dkey_shift
  283.         beq.b    .nos2
  284.         muls    height,d1
  285. .nos2        move.b    bitplan_lock,d2
  286.         lea.l    bitplan,a1
  287.         moveq    #8-1,d3
  288. .plan2        lsr.b    #1,d2
  289.         bcs.b    .lock2
  290.         sub.l    d1,(a1)
  291.         move.l    max_chip,d5
  292.         subq.l    #2,d5
  293.         and.l    d5,(a1)
  294. .lock2        addq.l    #4,a1
  295.         dbf    d3,.plan2
  296. .noup
  297. ;-------------- right move pic right -------
  298.         cmp.b    #$4e,d0
  299.         bne.b    .noright
  300.         moveq    #2,d1
  301.         move.b    bitplan_lock,d2
  302.         lea.l    bitplan,a1
  303.         moveq    #8-1,d3
  304. .plan3        lsr.b    #1,d2
  305.         bcs.b    .lock3
  306.         add.l    d1,(a1)
  307.         move.l    max_chip,d5
  308.         subq.l    #2,d5
  309.         and.l    d5,(a1)
  310. .lock3        addq.l    #4,a1
  311.         dbf    d3,.plan3
  312. .noright
  313. ;-------------- left move pic left ---------
  314.         cmp.b    #$4f,d0
  315.         bne.b    .noleft
  316.         moveq    #2,d1
  317.         move.b    bitplan_lock,d2
  318.         lea.l    bitplan,a1
  319.         moveq    #8-1,d3
  320. .plan4        lsr.b    #1,d2
  321.         bcs.b    .lock4
  322.         sub.l    d1,(a1)
  323.         move.l    max_chip,d5
  324.         subq.l    #2,d5
  325.         and.l    d5,(a1)
  326. .lock4        addq.l    #4,a1
  327.         dbf    d3,.plan4
  328. .noleft
  329. ;-------------- 1-8 (un)lock bitplan -------
  330.         cmp.b    #$01,d0
  331.         blt.b    .nolock
  332.         cmp.b    #$08,d0
  333.         bgt.b    .nolock
  334.         moveq    #0,d1
  335.         move.b    d0,d1
  336.         subq.b    #1,d1
  337.         bchg    d1,bitplan_lock
  338.         move.b    #$7f,(a0)
  339. .nolock
  340. ;-------------- M INC(modulo) --------------
  341.         cmp.b    #$37,d0
  342.         bne.b    .nom
  343.         addq.w    #2,modulo
  344. .nom
  345. ;-------------- N DEC(modulo) --------------
  346.         cmp.b    #$36,d0
  347.         bne.b    .non
  348.         subq.w    #2,modulo
  349. .non
  350. ;-------------- , CLR(modulo) --------------
  351.         cmp.b    #$38,d0
  352.         bne.b    .novir
  353.         clr.w    modulo
  354.         move.b    #$7f,(a0)
  355. .novir
  356. ;-------------- Q DEC(width) ---------------
  357.         cmp.b    #$10,d0
  358.         bne.b    .noq
  359.         cmp.w    #16,width
  360.         beq.b    .noq
  361.         sub.w    #16,width
  362. .noq
  363. ;-------------- W INC(width) ---------------
  364.         cmp.b    #$11,d0
  365.         bne.b    .now
  366.         cmp.w    #2048,width
  367.         beq.b    .now
  368.         add.w    #16,width
  369. .now
  370. ;-------------- A DEC(height) ---------------
  371.         cmp.b    #$20,d0
  372.         bne.b    .noa
  373.         cmp.w    #1,height
  374.         beq.b    .noa
  375.         subq.w    #1,height
  376. .noa
  377. ;-------------- S INC(height) ---------------
  378.         cmp.b    #$21,d0
  379.         bne.b    .nos
  380.         cmp.w    #2048,height
  381.         beq.b    .nos
  382.         addq.w    #1,height
  383. .nos
  384. ;-------------- R reset bitplans -----------
  385.         cmp.b    #$13,d0
  386.         bne.b    .nor
  387.         lea.l    bitplan,a1
  388.         move.l    (a1)+,d1
  389.         moveq    #7-1,d2
  390. .reset        move.l    d1,(a1)+
  391.         dbf    d2,.reset
  392.         move.b    #$7f,(a0)
  393. .nor
  394. ;-------------- Del INC(spr_color) ---------
  395.         cmp.b    #$46,d0
  396.         bne.b    .noDel
  397.         addq.w    #1,spr_color
  398.         and.w    #$f,spr_color
  399. .noDel
  400. ;-------------- Help sprite on/off ---------
  401.         cmp.b    #$5f,d0
  402.         bne.b    .noHelp
  403.         bsr    flip_spr
  404. .noHelp
  405. ;-------------- H HAM on/off ---------------
  406.         cmp.b    #$25,d0
  407.         bne.b    .noh
  408.         not.b    ham
  409. .noh
  410. ;-------------- E EHB on/off ---------------
  411.         cmp.b    #$12,d0
  412.         bne.b    .noe
  413.         not.b    ehb
  414. .noe
  415. ;-------------- F1 set picture height ------
  416.         cmp.b    #$50,d0
  417.         bne.b    .nof1
  418.         not.b    set_height
  419.         bne.b    .startset
  420.         move.w    tmp_height,d1
  421.         bgt.b    .oktmpheight
  422.         moveq    #1,d1
  423. .oktmpheight    move.w    d1,height
  424.         lea.l    bitplan,a1
  425.         lea.l    tmp_bitplan,a2
  426.         moveq    #8-1,d1
  427. .copyb2        move.l    (a2)+,(a1)+        ;keep top of screen ptr
  428.         dbf    d1,.copyb2
  429.         bra.b    .nof1
  430. .startset    clr.w    tmp_height
  431.         lea.l    bitplan,a1
  432.         lea.l    tmp_bitplan,a2
  433.         moveq    #8-1,d1
  434. .copyb        move.l    (a1)+,(a2)+        ;keep top of screen ptr
  435.         dbf    d1,.copyb
  436. .nof1
  437. ;-------------- C (enable cheat sequence) --
  438.  
  439.         cmp.b    #$33,d0
  440.         bne.b    .noc
  441.         lea.l    cheat_cnt,a1
  442.         cmp.b    #2,(a1)
  443.         beq.b    .okcheat
  444.         sf    (a1)
  445.         bra.b    .noc
  446. .okcheat    sf    (a1)
  447.         not.b    cheat
  448. .noc
  449.         bra.w    .raster
  450.  
  451. ;------------------------------------------------
  452.  
  453. .end_show
  454.         move.b    #$7f,dkey
  455.         move.w    #8,$9c(a6)
  456.         clr.w    nb_keys        ;flush keyboard buffer
  457.         move.b    #$7f,key_prev
  458.  
  459.         sf    set_height
  460.  
  461.         tst.b    gfx_param    ;sprite was ON ?
  462.         beq.b    .noflip
  463.         bsr    flip_spr    ;yes
  464. .noflip
  465.         move.w    #$0120,$96(a6)    ;sprites DMA and bitplan OFF
  466.         jsr    set_pic
  467.         move.w    #$8100,$96(a6)        ;bitplan DMA on
  468.  
  469.         lea.l    plan_txt,a0
  470.         bsr    print
  471.  
  472.         lea.l    bitplan,a1
  473.         move.w    depth,d2
  474.         subq.w    #1,d2
  475. .pr        move.l    (a1)+,d0
  476.         moveq    #8,d1
  477.         bsr    print_hex
  478.         move.b    #$20,d0
  479.         bsr    .printchar
  480.         dbf    d2,.pr
  481.         move.b    #$a,d0
  482.         bsr    .printchar
  483.  
  484.         lea.l    width_txt,a0
  485.         bsr    print
  486.         moveq    #0,d0
  487.         move.w    width,d0
  488.         moveq    #4,d1
  489.         bsr    print_decCR
  490.  
  491.         lea.l    height_txt,a0
  492.         bsr    print
  493.         move.w    height,d0
  494.         moveq    #4,d1
  495.         bsr    print_decCR
  496.  
  497.         lea.l    depth_txt,a0
  498.         bsr    print
  499.         move.w    depth,d0
  500.         moveq    #4,d1
  501.         bsr    print_decCR
  502.  
  503.         st    p_used        ;signal to allow sp command
  504.         jmp    end_command
  505.  
  506. ;-> d0=char
  507. .printchar    move.l    a0,-(a7)
  508.         lea.l    general_txt,a0
  509.         move.b    d0,(a0)
  510.         sf    1(a0)
  511.         bsr    print
  512.         move.l    (a7)+,a0
  513.         rts
  514.  
  515. plan_txt    dc.b "Bitplans address : ",$a,0
  516. width_txt    dc.b "Picture width  : ",0
  517. height_txt    dc.b "Picture height : ",0
  518. depth_txt    dc.b "Picture depth  : ",0
  519.  
  520.         cnop 0,4
  521.  
  522. **************************************************************************
  523. ;-------------- display parameters with sprite and mouse -----------------
  524.  
  525. do_param    tst.b    gfx_param
  526.         beq.w    .noparam
  527.  
  528.         bsr    init_mouse
  529.         bsr    init_spr
  530.         lea.l    $120(a6),a0
  531.         move.l    #0,(a0)+        ;sprite 0
  532.         move.l    #sprite_len,(a0)+    ;sprite 1
  533.         move.l    #empty_spr-sprite1,d0
  534.         moveq    #6-1,d1
  535. .clr        move.l    d0,(a0)+        ;don't use sprites 2-7
  536.         dbf    d1,.clr
  537.  
  538.         lea.l    ($0+16).w,a0
  539.         lea.l    bitplan,a1
  540.         moveq    #4-1,d3
  541.         moveq    #1,d0            ;xpos
  542.         moveq    #0,d1            ;ypos
  543. .nplan        move.l    (a1)+,d2
  544.         bsr    SprPrintLong
  545.         addq.w    #1,d1
  546.         dbf    d3,.nplan
  547.  
  548.         move.l    #(sprite2+16-sprite1),a0
  549.         moveq    #4-1,d3
  550.         moveq    #1,d0            ;xpos
  551.         moveq    #0,d1            ;ypos
  552. .nplan2        move.l    (a1)+,d2
  553.         bsr    SprPrintLong
  554.         addq.w    #1,d1
  555.         dbf    d3,.nplan2
  556.  
  557.         move.b    bitplan_lock,d3
  558.         lea.l    ($0+16).w,a0
  559.         moveq    #0,d0
  560.         moveq    #0,d1
  561.         moveq    #4-1,d4
  562. .lock1        moveq    #19,d2            ;spc
  563.         lsr.b    #1,d3
  564.         bcc.b    .nolock1
  565.         moveq    #18,d2            ;L
  566. .nolock1    bsr    print_spr_char
  567.         addq.w    #1,d1
  568.         dbf    d4,.lock1
  569.  
  570.         move.l    #(sprite2-sprite1+16),a0
  571.         moveq    #0,d0
  572.         moveq    #0,d1
  573.         moveq    #4-1,d4
  574. .lock2        moveq    #19,d2            ;spc
  575.         lsr.b    #1,d3
  576.         bcc.b    .nolock2
  577.         moveq    #18,d2            ;L
  578. .nolock2    bsr    print_spr_char
  579.         addq.w    #1,d1
  580.         dbf    d4,.lock2
  581.  
  582.         move.l    #(sprite2-sprite1+16),a0
  583.  
  584.         moveq    #10,d0
  585.         moveq    #0,d1
  586.         moveq    #16,d2            ;W
  587.         bsr    print_spr_char
  588.  
  589.         moveq    #12,d0
  590.         moveq    #0,d1
  591.         move.w    width,d2
  592.         bsr    SprPrintDec
  593.  
  594.         moveq    #10,d0
  595.         moveq    #1,d1
  596.         moveq    #17,d2            ;H
  597.         bsr    print_spr_char
  598.  
  599.         moveq    #12,d0
  600.         moveq    #1,d1
  601.         move.w    height,d2
  602.         tst.b    set_height
  603.         beq.b    .noset
  604.         move.w    tmp_height,d2
  605. .noset        bsr    SprPrintDec
  606.  
  607.         moveq    #10,d0
  608.         moveq    #2,d1
  609.         moveq    #13,d2            ;D
  610.         bsr    print_spr_char
  611.  
  612.         moveq    #19,d2
  613.         tst.b    ham
  614.         beq.b    .noham
  615.         moveq    #17,d2            ;H
  616. .noham        moveq    #10,d0
  617.         moveq    #3,d1
  618.         bsr    print_spr_char
  619.  
  620.         moveq    #19,d2
  621.         tst.b    ehb
  622.         beq.b    .noehb
  623.         moveq    #$e,d2            ;E
  624. .noehb        moveq    #12,d0
  625.         moveq    #3,d1
  626.         bsr    print_spr_char
  627.  
  628.  
  629.         moveq    #15,d0
  630.         moveq    #2,d1
  631.         move.w    depth,d2
  632.         bsr    print_spr_char
  633.  
  634. .noparam    rts
  635.  
  636. ;-> d0=xpos
  637. ;-> d1=ypos
  638. ;-> d2=long
  639. ;-> a0=sprite
  640.  
  641. SprPrintLong    movem.l    d0-d4,-(a7)
  642.         move.l    d2,d3
  643.         moveq    #8-1,d4
  644. .loop        rol.l    #4,d3
  645.         move.l    d3,d2
  646.         and.w    #$f,d2
  647.         bsr    print_spr_char
  648.         addq.w    #1,d0
  649.         dbf    d4,.loop
  650.         movem.l    (a7)+,d0-d4
  651.         rts
  652.  
  653. ;-> d0=xpos
  654. ;-> d1=ypos
  655. ;-> d2=word
  656. ;-> a0=sprite
  657.  
  658. SprPrintWord    movem.l    d0-d4,-(a7)
  659.         move.l    d2,d3
  660.         moveq    #4-1,d4
  661. .loop        rol.w    #4,d3
  662.         move.w    d3,d2
  663.         and.w    #$f,d2
  664.         bsr    print_spr_char
  665.         addq.w    #1,d0
  666.         dbf    d4,.loop
  667.         movem.l    (a7)+,d0-d4
  668.         rts
  669.  
  670. ;-> d0=xpos
  671. ;-> d1=ypos
  672. ;-> d2=number xxxx
  673. ;-> a0=sprite
  674.  
  675. SprPrintDec    movem.l    d0-d4,-(a7)
  676.         move.l    d2,d3
  677.  
  678.         divu    #1000,d3
  679.         move.w    d3,d2
  680.         bsr    print_spr_char
  681.  
  682.         addq.w    #1,d0
  683.         clr.w    d3
  684.         swap    d3
  685.         divu    #100,d3
  686.         move.w    d3,d2
  687.         bsr    print_spr_char
  688.  
  689.         addq.w    #1,d0
  690.         clr.w    d3
  691.         swap    d3
  692.         divu    #10,d3
  693.         move.w    d3,d2
  694.         bsr    print_spr_char
  695.  
  696.         addq.w    #1,d0
  697.         swap    d3
  698.         move.w    d3,d2
  699.         bsr    print_spr_char
  700.  
  701.         movem.l    (a7)+,d0-d4
  702.         rts
  703.  
  704.  
  705. ;-> d0=x pos
  706. ;-> d1=y pos
  707. ;-> d2=char
  708. ;-> a0=top left of sprite (64 wide)
  709.  
  710. print_spr_char    movem.l    d0-d4/a0-a1,-(a7)
  711.         ext.l    d0
  712.         mulu    #6*16,d1
  713.         add.l    d1,a0
  714.         lea.l    sprfont,a1
  715.         moveq    #5-1,d4
  716.         move.w    d0,d3
  717.         lsr.w    #1,d3
  718.         add.w    d3,a0
  719. .next        move.b    (a1,d2.w),d3
  720.         move.b    (a0),d1
  721.         btst    #0,d0
  722.         beq.b    .noshift
  723.         lsr.w    #4,d3
  724.         and.b    #$f0,d1
  725.         bra.b    .okshift
  726. .noshift    and.b    #$0f,d1
  727. .okshift    or.w    d3,d1
  728.         move.b    d1,(a0)
  729.         lea.l    16(a0),a0    ;next line in sprite
  730.         lea.l    160/8(a1),a1    ;next line in font
  731.         dbf    d4,.next
  732.         movem.l    (a7)+,d0-d4/a0-a1
  733.         rts
  734.  
  735. sprfont        incbin sprfont.raw
  736. ;"0123456789abcdefwhl "
  737.  
  738. init_mouse:
  739.         btst    #6,$bfe001
  740.         seq    left
  741.         btst    #10-8,$16(a6)
  742.         seq    right
  743.  
  744.         moveq    #0,d5
  745.         tst.b    mouse_speed
  746.         beq.b    pas_slow
  747.         moveq    #1,d5
  748.  
  749. pas_slow:    move.w    $a(a6),d0
  750.         move.w    d0,d1
  751.         lsr.w    #8,d1        ;y
  752.         and.w    #$ff,d0        ;x
  753.  
  754.         move.w    d0,d2
  755.         sub.w    old_mx,d2
  756.         cmp.w    #127,d2
  757.         blt.b    mo_x1
  758.         move.w    d0,d2
  759.         sub.w    #256,d2
  760.         sub.w    old_mx,d2
  761.         asr.w    d5,d2
  762.         add.w    d2,x_spr
  763.         move.w    d0,old_mx
  764.         bra.b    mo_x2
  765.  
  766. mo_x1:        cmp.w    #-127,d2
  767.         bgt.b    mo_x3
  768.         move.w    d0,d2
  769.         add.w    #256,d2
  770.         sub.w    old_mx,d2
  771.         asr.w    d5,d2
  772.         add.w    d2,x_spr
  773.         move.w    d0,old_mx
  774.         bra.b    mo_x2
  775.  
  776. mo_x3:        asr.w    d5,d2
  777.         add.w    d2,x_spr
  778.         move.w    d0,old_mx
  779.  
  780. mo_x2:        move.w    d1,d2
  781.         sub.w    old_my,d2
  782.         cmp.w    #127,d2
  783.         blt.b    mo_y1
  784.         move.w    d1,d2
  785.         sub.w    #256,d2
  786.         sub.w    old_my,d2
  787.         asr.w    d5,d2
  788.         add.w    d2,y_spr
  789.         move.w    d1,old_my
  790.         bra.b    mo_y2
  791.  
  792. mo_y1:        cmp.w    #-127,d2
  793.         bgt.b    mo_y3
  794.         move.w    d1,d2
  795.         add.w    #256,d2
  796.         sub.w    old_my,d2
  797.         asr.w    d5,d2
  798.         add.w    d2,y_spr
  799.         move.w    d1,old_my
  800.         bra.b    mo_y2
  801.  
  802. mo_y3:        asr.w    d5,d2
  803.         add.w    d2,y_spr
  804.         move.w    d1,old_my
  805. mo_y2:        rts
  806.  
  807. ;-----------------------------------------------
  808.  
  809. init_spr:
  810.         moveq    #0,d1
  811.         move.w    x_spr,d0
  812.         tst.w    d0
  813.         bpl.b    .so1
  814.         clr.w    d0
  815.         move.w    d0,x_spr
  816. .so1        cmp.w    #320-80,d0
  817.         blt.b    .so2
  818.         move.w    #319-80,d0
  819.         move.w    d0,x_spr
  820. .so2
  821.         lea.l    $0.w,a1
  822.         move.w    x_spr,d0
  823.         move.w    y_spr,d2
  824.         bsr    set_sprpos
  825.  
  826.         move.l    #(sprite2-sprite1),a1
  827.         move.w    x_spr,d0
  828.         move.w    y_spr,d2
  829.         add.w    #44,d0
  830.         bsr    set_sprpos
  831.  
  832.         rts
  833.  
  834. set_sprpos    add.w    #$81-8,d0
  835.         lsr.w    #1,d0
  836.         bcc.b    .so0
  837.         moveq    #1,d1
  838. .so0        move.b    d0,1(a1)
  839.  
  840.         move.w    d2,d0
  841.         bpl.b    .so3
  842.         clr.w    d0
  843.         clr.w    y_spr
  844. .so3        cmp.w    #256,d0
  845.         blt.b    .so4
  846.         move.w    #255,d0
  847.         move.w    d0,y_spr
  848. .so4        add.w    #$2c-2,d0
  849.         cmp.w    #256,d0
  850.         blt.b    .ok_yspr1
  851.         or.b    #%100,d1
  852. .ok_yspr1    move.b    d0,(a1)
  853.         add.w    #4*6,d0
  854.         cmp.w    #256,d0
  855.         blt.b    .ok_yspr2
  856.         or.b    #%10,d1
  857. .ok_yspr2    move.b    d0,8(a1)
  858.         move.b    d1,9(a1)
  859.         rts
  860.  
  861. flip_spr    movem.l    d0-d1/a0-a1,-(a7)
  862.         move.w    #$24,$104(a6)        ;sprites in front
  863.         lea.l    $140(a6),a0
  864.         moveq    #0,d0
  865.         moveq    #$10-1,d1
  866. .clr        move.l    d0,(a0)+        ;clr spr data
  867.         dbf    d1,.clr
  868.         move.w    #$20,$96(a6)        ;Sprite DMA OFF
  869.         not.b    gfx_param
  870.         beq.b    .nospr
  871.         move.w    #$8020,$96(a6)        ;Sprite DMA ON
  872. .nospr
  873.         lea.l    sprite1,a0
  874.         lea.l    $0.w,a1
  875.         move.w    #(sprite_len*2)/4-1,d1
  876. .loop        move.l    (a0),d0
  877.         move.l    (a1),(a0)+
  878.         move.l    d0,(a1)+
  879.         dbf    d1,.loop
  880.         movem.l    (a7)+,d0-d1/a0-a1
  881.         rts
  882.  
  883.  
  884.         cnop 0,4
  885.  
  886. ;-------------- picture editor variables (cmd P) -----
  887.  
  888. depth        dc.w 8
  889. bitplan        dcb.l 8,0
  890. bitplan_lock    dc.b %00000000        ;1 bit for each bitplan
  891. hires        dc.b 0            ;0=low-res -1=high res
  892. ham        dc.b 0            ;0=HAM off -1=HAM on
  893. ehb        dc.b 0            ;0=EHB off -1=EHB on
  894. gfx_param    dc.b 0
  895. set_height    dc.b 0            ;set height mode on/off
  896. p_used        dc.b 0            ;-1 if P command used (for SP)
  897.         even
  898. width        dc.w 320
  899. height        dc.w 256
  900. tmp_height    dc.w 0            ;used by set height
  901. tmp_bitplan    dcb.l 8,0        ;keep top of screen for set height
  902. modulo        dc.w 0
  903.  
  904. spr_color    dc.w 0            ;no of bank used for sprite color
  905. x_spr:        dc.w 0
  906. y_spr:        dc.w 0
  907. x_spr2:        dc.w 0
  908. y_spr2:        dc.w 0
  909. old_mx:        dc.w 0
  910. old_my:        dc.w 0
  911. left:        dc.b 0
  912. right:        dc.b 0
  913. mouse_speed:    dc.b 0
  914.  
  915.         cnop 0,4
  916.  
  917. ;sprite for gfx-ripper info pannel (HELP key)
  918.  
  919. sprite1:    dc.w $3080,0,0,0,$4800,0,0,0
  920.         rept 6*4
  921.         dc.w 0,0,0,0,0,0,0,0
  922.         endr
  923. empty_spr    dc.w 0,0,0,0,0,0,0,0
  924.         dc.w 0,0,0,0,0,0,0,0
  925.  
  926. sprite_len    equ (27*16)
  927.  
  928. sprite2:    dc.w $3080,0,0,0,$4800,0,0,0
  929.         rept 6*4
  930.         dc.w 0,0,0,0,0,0,0,0
  931.         endr
  932.         dc.w 0,0,0,0,0,0,0,0
  933.         dc.w 0,0,0,0,0,0,0,0
  934. end_sprite
  935.  
  936.  
  937.